{
 "cells": [
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# 问题：pandas 中的默认缺失值标记是什么，以及如何检测DataFrame中的所有缺失值\n"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "collapsed": true
   },
   "source": [
    "面试官想从这道题中考察面试人什么？\n",
    "在数据分析的过程中，一切都是未知，那数据必然也会有不完整的时候。那么，我们就要使用缺失值标记去防止程序中断，否则从头再来一遍是很费时间的。\n",
    "\n",
    "答案\n",
    "在 pandas 中，NaN 是默认的缺失值标记。\n",
    "\n",
    "isnull()和notnull()函数检测 DataFrame中 的所有缺失值。\n",
    "\n",
    "拓展\n",
    "接下来的题目都是关于 pandas 的。pandas 它包含了数据结构和数据处理工具，使得 Python 中的数据清理和分析变得快速而简单。pandas 通常与数值计算工具（如 NumPy 和 SciPy），分析库（如statsmodels 和 scikit-learn）以及数据可视化库（如 matplotlib）结合使用。pandas 采用了 NumPy 惯用的基于数组的计算方式的重要组成部分，尤其是基于数组的函数，以及偏向不用 for 循环去对数据处理。虽然 pandas 采用了 NumPy 的许多编码习惯用法，但最大的不同是 pandas 是为处理表格或异构数据而设计的。相比之下，NumPy 最适合处理齐次数值数组数据。\n",
    "\n",
    "在数据分析和建模的过程中，我们知道有很大一部分时间会花在准备数据：收集数据，清理数据，转换数据。处理丢失数据也是在数据分析中非常常见的。pandas 使处理丢失的数据尽可能地轻松。 例如，默认情况下，所有有关 pandas 对象的描述性统计信息都会排除丢失的数据。\n",
    "\n",
    "先认识一下 pandas 的两种数据结构：Series和 DataFrame。\n",
    "\n",
    "Series是一种类似于Pythonlist的一维数组对象，它包含一系列值（与NumPy类型类似）和一个关联的数据标签数组(称之为index)。\n",
    "\n",
    "DataFrame表示一个矩形数据表，并包含列的有序集合，每个列可以是不同的值类型（数字，字符串，布尔值等）。DataFrame同时具有行索引和列索引；可以将其视为所有共享相同索引的Series的字典。在后台，数据存储为一个或多个二维块，而不是列表，字典或其他一些一维数组的集合。\n",
    "\n",
    "Python 中的三种缺失值：\n",
    "\n",
    "Python 的None对象；\n",
    "在 pandas 中，将缺失值表示为 NA，表示不可用 not available，主要表示为np.nan；\n",
    "对于数值数据，pandas 使用浮点值 NaN（Not a Number）表示缺失数据。\n",
    "再回到这道面试题上，如何去处理缺失数据呢？\n",
    "\n",
    "In [1]: import pandas as pd\n",
    "\n",
    "In [2]: import numpy as np\n",
    "\n",
    "In [3]: data = pd.Series(['a1', 'a2', np.nan, 'a4']) # 带有缺失数据的示例数据\n",
    "\n",
    "In [4]: data.isnull() # isnull方法判断数据中的每个值是否缺失\n",
    "Out[4]:\n",
    "0    False\n",
    "1    False\n",
    "2     True\n",
    "3    False\n",
    "dtype: bool\n",
    "\n",
    "In [5]: data.dropna() # dropna去除缺失的数值\n",
    "Out[5]:\n",
    "0    a1\n",
    "1    a2\n",
    "3    a4\n",
    "dtype: object\n",
    "\n",
    "In [6]: data.fillna(\"NA\") # fillna使用默认值填充缺失的数值位置\n",
    "Out[6]:\n",
    "0    a1\n",
    "1    a2\n",
    "2    NA\n",
    "3    a4\n",
    "dtype: object"
   ]
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 3",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.8.3"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 1
}